package com.lanyuan.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Random;

import com.lanyuan.vo.PrizeLevel;

public class TestUtil {

	public static void main(String[] args) {
		jackpot();
		for (int i = 0; i < 1000; i++) {
			jackpot();
			// Map<String, Object> mapq = new HashMap<String, Object>();
			// String mensg = null;
			// mapq.put("onenumber", "3");// 一等奖
			// mapq.put("twonumber", "4");// 二等奖
			// mapq.put("threenumber", "0");// 3等奖
			// mapq.put("fournumber", "0");// 4等奖
			// mapq.put("fivenumber", "0");// 5等奖
			// mapq.put("yjusernum", "1000");// 用户预算
			// Integer ie = Lottery(mapq);
			// if (ie == 0) {
			// mensg = "未中奖";
			// }
			// if (ie == 1) {
			// mensg = "一等奖";
			// }
			// if (ie == 2) {
			// mensg = "二等奖";
			// }
			// if (ie == 3) {
			// mensg = "三等奖";
			// }
			// if (ie == 4) {
			// mensg = "四等奖";
			// }
			// if (ie == 5) {
			// mensg = "五等奖";
			// }
			// System.out.println("中奖结果-------" + mensg + ie);
		}

	}

	public static String getDays() {
		return null;
	}

	/**
	 * 8位随机数
	 * 
	 * @return
	 */
	public static String jackpot() {

		Random rand = new Random();
		int i = rand.nextInt(100000000);
		String auto = Integer.toString(i);
		return auto;
	}

	/**
	 * 抽奖
	 * 
	 * @param orignalRates
	 *            原始的概率列表，保证顺序和实际物品对应
	 * @return
	 *         物品的索引
	 */
	public static int lottery2(Map<String, Object> map) {
		// 奖品概率集合
		List<Double> orignalRates = new ArrayList<Double>(PrizeLevel.values().length);
		orignalRates.add((Double) (map.get(PrizeLevel.ONE.getGl())));
		orignalRates.add((Double) (map.get(PrizeLevel.TWO.getGl())));
		orignalRates.add((Double) (map.get(PrizeLevel.THREE.getGl())));
		orignalRates.add((Double) (map.get(PrizeLevel.FOUR.getGl())));
		orignalRates.add((Double) (map.get(PrizeLevel.FIVE.getGl())));

		if (orignalRates.isEmpty()) {
			return -1;
		}

		int size = orignalRates.size();

		// // 计算总概率，这样可以保证不一定总概率是1
		// double sumRate = 0d;
		// for (double rate : orignalRates) {
		// sumRate += rate;
		// }

		// 计算每个物品在总概率的基础下的概率情况
		List<Double> sortOrignalRates = new ArrayList<Double>(size);
		Double tempSumRate = 0d;
		for (double rate : orignalRates) {
			tempSumRate += rate;
			sortOrignalRates.add(tempSumRate);
		}

		if (tempSumRate < 1) {
			sortOrignalRates.add(1.0d);
		}

		System.out.println(sortOrignalRates);

		// 根据区块值来获取抽取到的物品索引
		double nextDouble = Math.random();
		sortOrignalRates.add(nextDouble);
		Collections.sort(sortOrignalRates);

		// 中奖奖品等级
		int level = sortOrignalRates.indexOf(nextDouble) + 1;
		if (level == 6) {
			return 0;
		}
		// 中奖奖品数量
		int number = (Integer) map.get(PrizeLevel.getNumber(level));
		if (number <= 0) {
			return 0;
		} else {
			// 减去中奖奖品数量
			map.put(PrizeLevel.getNumber(level), --number);
			return level;
		}
	}

	public static Integer Lottery(Map<String, Object> map) {// 返回值：1-一等奖 2-二等奖 3-三等奖 4-幸运奖 0-不中奖

		Integer one = Integer.parseInt(map.get("onenumber").toString());// 一等奖
		Integer two = Integer.parseInt(map.get("twonumber").toString());// 二等奖
		Integer three = Integer.parseInt(map.get("threenumber").toString());// 3等奖
		Integer four = Integer.parseInt(map.get("fournumber").toString());// 4等奖
		Integer five = Integer.parseInt(map.get("fivenumber").toString());// 5等奖
		Integer yjusernum = Integer.parseInt(map.get("yjusernum").toString());// 获取概率

		Random rand = new Random();
		Integer ranNum = (int) (rand.nextInt(yjusernum));
		if ((ranNum >= 0) && (ranNum < 10))// 获奖范围内
		{
			if (ranNum == 0)// 获得0 概率为0.1%
			{
				if (one > 0) {
					map.put("onenumber", --one);
					return 1;
				}
				if (two > 0) {
					map.put("twonumber", --two);
					return 2;
				}
				if (three > 0) {
					map.put("threenumber", --three);
					return 3;
				}
				if (four > 0) {
					map.put("fournumber", --four);
					return 4;
				}
				if (five > 0) {
					map.put("fivenumber", --five);
					return 5;
				}

			}

			if ((ranNum >= 0) && (ranNum < 2)) {
				if (two > 0) {
					map.put("twonumber", --two);
					return 2;
				}
				if (three > 0) {
					map.put("threenumber", --three);
					return 3;
				}
				if (four > 0) {
					map.put("fournumber", --four);
					return 4;
				}
				if (five > 0) {
					map.put("fivenumber", --five);
					return 5;
				}
			}

			if ((ranNum >= 0) && (ranNum < 5)) {

				if (three > 0) {
					map.put("threenumber", --three);
					return 3;
				}
				if (four > 0) {
					map.put("fournumber", --four);
					return 4;
				}
				if (five > 0) {
					map.put("fivenumber", --five);
					return 5;
				}
			}

			if ((ranNum >= 0) && (ranNum < 8)) {

				if (four > 0) {
					map.put("fournumber", --four);
					return 4;
				}
				if (five > 0) {
					map.put("fivenumber", --five);
					return 5;
				}
			}
			if (five > 0) {
				map.put("fivenumber", --five);
				return 5;
			}
		}

		return 0;
	}
}
